/*
 * layui的初始化模块可以理解为，引入这个模块的js文件
 * 值得注意的是：layui的模块之间存在依赖关系，例如引入了table模块，它会layui/lay/moudules/table.js
 * 这个文件引入进来，并且它还会将这个模块所依赖的其他模块自动加入进来，
 * 实际引入的模块有：table、form、jquery、layer、laypage、laytpl、util，7个js文件
 * 所以我仅仅初始化了table模块，却能获得form、jquery、layer的模块对象
 */
//layui初始化表格模组

layui.use(['table','transfer'], function(){
  //获得模块对象
  var table = layui.table;
  var form = layui.form;
  var $ = layui.jquery;
  var layer = layui.layer;
  var transfer = layui.transfer;
  
  //数据表格渲染
  var ripareaTable = table.render({
    elem: '#ripareaTable'
    ,url:'basic/ripareas'
    ,method: 'get'
    ,where: {} // 你额外要携带数据，以键值对的方式存入
    ,toolbar: '#ripareaToolbar' // 开启头部工具栏，并为其绑定左侧模板
    ,cellMinWidth: 80 // 全局定义所有常规单元格的最小宽度（默认：60）
    ,cols: [[
      {type:'numbers'} // 序号
      ,{type: 'checkbox'} // 复选框
      ,{field:'ripAreaId', title:'定区ID'}
      ,{field:'ripAreaName', title:'定区名'}
      ,{field:'staffId', title:'负责人Id'}
      ,{field:'staffName', title:'负责人'}
     // ,{field:'isOuterNet', title:'是否外网'}
      ,{field:'useable', title:'是否可用',templet:function(d){
    	  if(d.useable == 'Y'){
    		  return "可用";
    	  }else{
    		  return "不可用";
    	  }
      }}
      //,{field:'description', title:'描述'}
      ,{fixed: 'right', align: 'center', title:'冻结或还原', width:100, templet: '#checkboxTpl', unresize: true}
      //,{fixed: 'right', align: 'center', title:'操作', width:120, toolbar: '#resourceBar', unresize: true}
    ]]
    ,page: true // 开启分页
    ,limit: 10 // 每页显示的条数
    ,limits: [5,10,20,50,100] // 每页条数的选择项
    ,loading: true // 是否显示加载条(切换分页的时候显示）
    ,title: '定区数据表' // 定义 table 的大标题（在文件导出等地方会用到）
    ,id: 'ripareaTable' // 设定容器唯一 id
    ,even: false // 隔行变色
  });
  
  //头部搜素表单提交
  form.on('submit(ripareaSearchBtn)', function(data){
	  console.log(data.elem) //被执行事件的元素DOM对象，一般为button对象
	  console.log(data.form) //被执行提交的form对象，一般在存在form标签时才会返回
	  console.log(data.field) //当前容器的全部表单字段，名值对形式：{name: value}
	  //执行后台代码
	  var data = data.field;
	  ripareaTable.reload({
		  where : {
			  'ripAreaName':data.ripAreaName,
			  'staffName':data.staffName,
			  'useable':data.useable
		  },
		  page : {
			  curr : 1
		  }
	  });
	  return false; //阻止表单跳转。如果需要表单跳转，去掉这段即可。
  });
  
  //新增表单提交
  form.on('submit(addRipareaBtn)', function(data){
	  console.log(data.elem) //被执行事件的元素DOM对象，一般为button对象
	  console.log(data.form) //被执行提交的form对象，一般在存在form标签时才会返回
	  console.log(data.field) //当前容器的全部表单字段，名值对形式：{name: value}
	  //执行后台代码
	  $.ajax({
		  type:"post",
			url:'basic/riparea',
			data:data.field,
			success:function(result) {
				if (result == true) {		
					layer.msg('添加成功!',{icon: 1, time: 2500});
				} else {
					layer.msg('添加失败!',{icon: 1, time: 2500});
				}
				//刷新数据表格
				table.reload('ripareaTable', {url: 'basic/ripareas'});
			}
	  })
	  layer.close(index);
	  return false; //阻止表单跳转。如果需要表单跳转，去掉这段即可。
  });
 
  
  //修改表单提交
  form.on('submit(updateRipareaBtn)', function(data){
	  console.log(data.elem) //被执行事件的元素DOM对象，一般为button对象
	  console.log(data.form) //被执行提交的form对象，一般在存在form标签时才会返回
	  console.log(data.field) //当前容器的全部表单字段，名值对形式：{name: value}
	  //执行后台代码
	  $.ajax({
		type:"post",
		url:'basic/riparea',
		data:data.field,
		success:function(result) {
			if (result == true) {		
				layer.msg('修改成功!',{icon: 1, time: 2500});
			} else {
				layer.msg('修改失败!',{icon: 1, time: 2500});
			}
			layer.closeAll();
			//刷新数据表格
			table.reload('ripareaTable', {url: 'basic/ripareas'});
		}
	});
	return false; //阻止表单跳转。如果需要表单跳转，去掉这段即可。
  });
  
  
  //头工具栏事件
  table.on('toolbar(ripareaTableEvent)', function(obj){
	 //获取当前表格选中状态和选中的数据
	var checkStatus = table.checkStatus(obj.config.id);
	//区分点击的按钮
    switch(obj.event){
      case 'addRiparea':
    	  //弹出新增模态框
    	  initaddRipareaModal();
      break;
      case 'updateRiparea':
    	  //选择的数据数量
    	  if (checkStatus.data.length > 1) {
    		  layer.alert('最多也只能选择一行');
    	  } else if (checkStatus.data.length < 1) {
    		  layer.alert('最少要选择一行');
    	  }else if (checkStatus.data[0].useable =='N') {
    		  layer.alert('您选择的已被禁用了，请重新选择！');
    	  } else {
    		  //弹出修改模态框，传递当前选中的一行数据过去
    		  initupdateRipareaModal(checkStatus.data[0]);
    	  }
      break;
      case 'removeRiparea':
    	  //当前选中行的数据
    	  var data = checkStatus.data;
    	  if(checkStatus.data.length < 1) {
    		  layer.alert('请选择一行！');
    	  } else {
    		//调用删除方法，传递要删除的行的数据
        	  removeRiparea(data);
    	  }
      break;
      case 'restoreRiparea':
    	  //当前选中行的数据
    	  var data = checkStatus.data;
    	  //调用删除方法，传递要删除的行的数据
    	  if(checkStatus.data.length < 1) {
    		  layer.alert('请选择一行！');
    	  } else {
    		  restoreRiparea(data);
    	  }
      break;
      case 'assignDispatchers':
    	  var data = checkStatus.data;
    	  //选择的数量
    	  if (checkStatus.data.length < 1) {
    		  layer.alert("请选择一行！");
		  } else if(checkStatus.data.length > 1){
			  layer.alert("最多只能选择一行！");
		  }else{
			  //弹出模态框
			  initaSsignDispatchersModal(data);
		  }
      break;
      case 'areaCustomer':
    	  var data = checkStatus.data;
    	  //选择的数量
    	  if (checkStatus.data.length < 1) {
    		  layer.alert("请选择一行！");
		  } else if(checkStatus.data.length > 1){
			  layer.alert("最多只能选择一行！");
		  }else{
			  //弹出模态框
			  initAreaCustomerModal(data);
		  }
      break;
    };
  });
  
  //监听工具条 
  table.on('tool(ripareaTableEvent)', function(obj){
    var data = obj.data; //获得当前行数据
    var layEvent = obj.event; //获得 lay-event 对应的值（也可以是表头的 event 参数对应的值）
    if(layEvent === 'del'){ //删除
      layer.confirm('确认删除吗？', function(index){
    	//把当前要删除的数据放入数组，因为删除方法要的是一个数组对象
    	var objArray = new Array(data);
        //调用删除方法，传递要删除的行的数据
        removeRiparea(objArray);
        //关闭当前页面
        layer.close(index);
      });
    } else if(layEvent === 'edit'){ //编辑
      //弹出修改模态框，传递当前选中的一行数据过去
      initupdateRipareaModal(data);
    }
  });
  
  //监听锁定操作
  form.on('switch(areable)', function(obj){
	//定区ID
	var ripAreaId = obj.value;
	//定义提示信息, 状态
	var msg, useable;
	if (this.checked) {
		msg = "还原", useable = 'Y';
	} else {
		msg = "禁用", useable = 'N';
	}
	//发送异步请求冻结或还原资源
    $.ajax({
    	async: false, //默认为true，false表示同步，如果当前请求没有返回则不执行后续代码
		type: "post", 
		url:'sys/frozenORrecoverSubarea',
		data : {
			ripAreaId:ripAreaId,
			useable:useable,
		},
		datatype : 'json',
		success:function(result) {
			if (result == true) {
				layer.msg(msg + "成功！", {
				  icon: 1, //图标，可输入范围0~6
				  time: 2500 //2秒关闭（如果不配置，默认是3秒）
				});   
			} else {
				layer.msg(msg + "失败！", {icon: 2, time: 2500}); 
			}
			//刷新数据表格
			table.reload('ripareaTable', {url: 'sys/subareas'});
		}
	});
  });
  
  //关闭模态框 新增和修改模态框共用这个点击事件
  $(".modalClose").click(function(){
	  //关闭页面上所有类型的所有弹框
	  layer.closeAll();
  });
  
  //逻辑删除定区的方法
  var removeRiparea = function(data){
	  //定义一个要删除的所有定区ID的字符串
	  var ripAreaIdStr = "";
	  //遍历传递过来的要删除的数据
	  for (var i = 0; i < data.length; i++) {
		  if(data[i].useable == "N"){
			  	layer.msg('您选择的已被禁用了');
				return;
			}
		  //拿出定区ID进行拼接
		  ripAreaIdStr += data[i].ripAreaId + ",";
	  }
	  //截取掉因为拼接产生的多余的一个逗号
	  ripAreaIdStr = ripAreaIdStr.substring(0, ripAreaIdStr.length - 1);
	  //向服务端发送删除指令
	  //layer.alert('删除=' + ripAreaIdStr);
	  layer.confirm('确认冻结吗?', {icon: 3, title:'提示'}, function(index){
		  $.ajax({
				type: "post", 
				url:'basic/frozenORrecoverRiparea',
				data : {ripAreaIdStr:ripAreaIdStr},
				success:function(result) {
					if (result == true) {
						layer.msg('冻结成功!',{icon: 1, time: 2500});
					} else {
						layer.msg('冻结失败!',{icon: 1, time: 2500});
					}
					//刷新数据表格
					table.reload('ripareaTable', {url: 'basic/ripareas'});
				}
		  	});
		  layer.close(index);
		});
	  
  }
  
  //还原区域的方法 公用
  var restoreRiparea = function(data){
	  //定义一个要删除的所有定区ID的字符串
	  var ripAreaIdStr = "";
	  //遍历传递过来的要删除的数据
	  for (var i = 0; i < data.length; i++) {
		  if(data[i].useable == "Y"){
			  	layer.msg('您选择的正在使用中');
				return;
			}
		  //拿出定区ID进行拼接
		  ripAreaIdStr += data[i].ripAreaId + ",";
	  }
	  //截取掉因为拼接产生的多余的一个逗号
	  ripAreaIdStr = ripAreaIdStr.substring(0, ripAreaIdStr.length - 1);
	  //向服务端发送删除指令
	  layer.confirm('确认还原吗？', {icon: 3, title:'提示'}, function(index){
		  $.ajax({
				type: "post", 
				url:'basic/restoreRrecoverRiparea',
				data : {ripAreaIdStr:ripAreaIdStr},
				success:function(result) {
					if (result == true) {
						layer.msg('还原成功!',{icon: 1, time: 2500});
					} else {
						layer.msg('还原失败!',{icon: 1, time: 2500});
					}
					//刷新数据表格
					table.reload('ripareaTable', {url: 'basic/ripareas'});
				}
		  	});
		  layer.close(index);
		});
	 
  }
  
  //初始化新增模态框
  var initaddRipareaModal = function(){
	  //弹出一个页面层
	  layer.open({
		  type: 1 // 基本层类型0~4，1为页面层
		  ,title: '添加定区' // 标题
		  ,area: ['400px', '550px'] // 宽高 只写一个参数就是表示宽度，高度会自适应
		  ,content: $("#addRipareaModal") // 文本、html都行
	      ,anim: 0 // 弹出动画
		  ,resize: false // 是否允许拉伸
		  ,end : function(){ // 弹出层销毁时的回调函数（不论何种方式，只要关闭了就执行）
			  //清空表单
    		  $("#addRipareaForm")[0].reset();
		  }    
	  });
  }
  
  //初始化修改模态框
  var initupdateRipareaModal = function(data){
	  $("#updateRipareaForm #_method").val("put");
	  //弹出一个页面层
	  layer.open({
		  type: 1 // 基本层类型0~4，1为页面层
		  ,title: '修改分区' // 标题
		  ,area: ['400px', '550px'] // 宽高 只写一个参数就是表示宽度，高度会自适应
		  ,content: $("#updateRipareaModal") // 文本、html都行
		  ,anim: 0 // 弹出动画
		  ,resize: false // 是否允许拉伸
		  ,end : function(){ // 弹出层销毁时的回调函数（不论何种方式，只要关闭了就执行）
			  //清空表单
    		  $("#updateRipareaForm")[0].reset();
		  }    
	  });
	  //表单赋值
	  form.val('updateRipareaForm', {
		  "ripAreaId": data.ripAreaId
		  ,"ripAreaName": data.ripAreaName
	      ,"staffName": data.staffName
	      ,"useable": data.useable
          ,"description": data.description
	  });
  }
  
  var staffs;
  //监听行单击事件
  table.on('row(ripareaTableEvent)', function(obj){
	 // console.info(obj.tr) //得到当前行元素对象
	  console.log(obj.data.ripAreaId) //得到当前行数据
	  //obj.del(); //删除当前行
	  //obj.update(fields) //修改当前行数据
	  var ripAreaId = obj.data.ripAreaId;
	  $.get("basic/staffs/"+ripAreaId,function(data){
		  staffs = data;
	  });
  });
  
  
  var staffdata = [];
  // 初始化为定区指定取派员模态框 -----------------------------------------
  var initaSsignDispatchersModal = function(data){
	  staffdata = [];
	  //弹出一个页面层
	  layer.open({
		  type: 1 // 基本层类型0~4，1为页面层
		  ,title: '分配取派员' // 标题
		  ,area: ['700px', '520px'] // 宽高 只写一个参数就是表示宽度，高度会自适应
		  ,content: $("#assignDispatchersModal") // 文本、html都行
		  ,anim: 0 // 弹出动画
		  ,resize: false // 是否允许拉伸
		  ,btn: ['关闭'] //按钮
	      ,yes: function(){
	    	  layer.closeAll();
	    	  var data = transfer.getData("aipAreaStaffFransfer");
	    	  var a = form.val("assignDispatchersForm");
	       }
	       /*,btn2: function(){
	         layer.closeAll();
	       }*/
		  ,end : function(){ // 弹出层销毁时的回调函数（不论何种方式，只要关闭了就执行）
			  //清空表单
    		  $("#assignDispatchersForm")[0].reset();
		  }    
	  });
	  
	  var ripAreaId = '';
	  var html = '';
	  for (var i = 0; i < data.length; i++) {
		  ripAreaId += data[i].ripAreaId + (i == data.length-1 ? "":",");
		  html += "<tr>"+"<td>"+data[i].ripAreaName+"</td>"+"<td>"+data[i].staffName+"</td>"+"</tr>";
	  }
	  $("#tb tbody").html(html);
	  
	  $.ajax({
			type: "get", 
			url:'basic/RipareaStaffs/'+ripAreaId,
			async:false,
			success:function(result) {
				for (var i = 0; i < result.length; i++) {
					staffdata.push(result[i].staffId);
				}
			}
			
	  	});
	  
	  
	  //为定区分配取派员穿梭框
	  transfer.render({
		  elem:'#aipAreaStaffFransfer', //指向容器选择器
		  title:['职员', '为定区分配取派员'], //穿梭框上方标题
		  id:'aipAreaStaffFransfer',//设定实例唯一索引，用于基础方法传参使用。
		  value:staffdata, //初始选中的数据（右侧列表）
		  data:staffs, //数据源
		  parseData: function(res){ //用于对数据源进行格式解析
		    return {
		      "value": res.staffId //数据值
		      ,"title": res.staffName //数据标题
		      ,"disabled": res.disabled  //是否禁用
		      ,"checked": res.checked //是否选中
		    }
		  },
		  onchange: function(data, index){ //左右数据穿梭时的回调
			  //console.log(data); //得到当前被穿梭的数据
			  //console.log(index); //如果数据来自左边，index 为 0，否则为 1
			  var str = new Array();
			  for (var i = 0; i < data.length; i++) {
				  str.push(data[i].value);
			  }
			  $.ajax({
				  type:'post',
			  	  url:'basic/ripareaStaff/'+ripAreaId+'/'+str+'/'+index,
			  	  success:function(result){
			  		  if(result == true){
			  			layer.msg('操作成功!',{icon: 1, time: 2500});
			  		  }else{
			  			layer.msg('操作失败!',{icon: 1, time: 2500});
			  		  }
			  	  }
			  })
			  
		  },
		  showSearch:true, //是否开启搜索
	  });
	  
	  //为管理表单赋值
	  form.val('assignDispatchersForm', {
		  "ripAreaId": ripAreaId
	  });
  }
  
  var customer;
  $.get("basic/customers",function(data){
	  customer = data;
  });
  
  var customerData = [];
  //定区客户模态框----------------------------------------------------------
  var initAreaCustomerModal = function(data){
	  customerData = [];
	//弹出一个页面层
	  layer.open({
		  type: 1 // 基本层类型0~4，1为页面层
		  ,title: '定区客户' // 标题
		  ,area: ['700px', '520px'] // 宽高 只写一个参数就是表示宽度，高度会自适应
		  ,content: $("#areaCustomerModal") // 文本、html都行
		  ,anim: 0 // 弹出动画
		  ,resize: false // 是否允许拉伸
		  ,btn: ['关闭'] //按钮
	      ,yes: function(){
	    	  layer.closeAll();
	       }
		  ,end : function(){ // 弹出层销毁时的回调函数（不论何种方式，只要关闭了就执行）
			  //清空表单
    		  $("#areaCustomerForm")[0].reset();
		  }    
	  });
	  
	  var ripAreaId = '';
	  var html = '';
	  for (var i = 0; i < data.length; i++) {
		  ripAreaId += data[i].ripAreaId + (i == data.length-1 ? "":",");
		  html += "<tr>"+"<td>"+data[i].ripAreaName+"</td>"+"<td>"+data[i].staffName+"</td>"+"</tr>";
	  }
	  $("#tb tbody").html(html);
	  
	  $.ajax({
		  type:'get',
		  url:'basic/customers/'+ripAreaId,
		  async:false,
		  success:function(result) {
			 for (var i = 0; i < result.length; i++) {
				 customerData.push(result[i].customerId);
			 }
		  }
	  })
	  
	//为定区分配客户穿梭框
	  transfer.render({
		  elem:'#areaCustomerFransfer', //指向容器选择器
		  title:['客户', '为定区分配客户'], //穿梭框上方标题
		  id:'areaCustomerFransfer',//设定实例唯一索引，用于基础方法传参使用。
		  value:customerData, //初始选中的数据（右侧列表）
		  data:customer, //数据源
		  parseData: function(res){ //用于对数据源进行格式解析
		    return {
		      "value": res.customerId //数据值
		      ,"title": res.customerName //数据标题
		      ,"disabled": res.disabled  //是否禁用
		      ,"checked": res.checked //是否选中
		    }
		  },
		  onchange: function(data, index){ //左右数据穿梭时的回调
			  //console.log(data); //得到当前被穿梭的数据
			  //console.log(index); //如果数据来自左边，index 为 0，否则为 1
			  var str = new Array();
			  for (var i = 0; i < data.length; i++) {
				  str.push(data[i].value);
			  }
			  console.info(str)
			  console.info(ripAreaId)
			  $.ajax({
				  type:'post',
			  	  url:'basic/ripareaCustomer/'+ripAreaId+'/'+str+'/'+index,
			  	  success:function(result){
			  		  if(result == true){
			  			layer.msg('操作成功!',{icon: 1, time: 2500});
			  		  }else{
			  			layer.msg('操作失败!',{icon: 1, time: 2500});
			  		  }
			  	  }
			  })
			  
		  },
		  showSearch:true, //是否开启搜索
	  });
	  
	  //为管理表单赋值
	  form.val('areaCustomerForm', {
		  "ripAreaId": ripAreaId
	  });
  }
  
  $.ajax({
		type:"get",
		url:'basic/staffName',
		success:function(result) {
			//province = result;
		    var mh_options = "<option value=''>请选择负责人</option>";
		    for(var i=0;i<result.length;i++){
		        mh_options += "<option value='"+result[i].staffName+"'>"+result[i].staffName+"</option>";
		    }
		    $("#addRipareaModal #staffName").append(mh_options);
		    //console.info(mh_options)
		    form.render('select');
		}
  })
  

});
